#!/bin/sh 
# Copyright (C) 2010 OpenWrt.org

#********** COPYRIGHT AND CONFIDENTIALITY INFORMATION NOTICE *************
#** Copyright (c) 2014 - Technicolor Delivery Technologies, SAS         **
#** All Rights Reserved                                                 **

#set -x

FILE_FP_DONE="`uci get -q minidlna.config.db_dir`/media_disk_fingerprint_done"



minidlna_print() {
    logger -t minidlna_bg "$1"
}

minidlna_rm_FP_done() {
  minidlna_print "Remove FP done: $FILE_FP_DONE"
  rm -f $FILE_FP_DONE
}

minidlna_set_FP_done() {
  minidlna_print "Set FP done: $FILE_FP_DONE"
  cat ${db_dir}/media_disk_fingerprint | md5sum | cut -f 1 -d ' ' > ${db_dir}/media_disk_fingerprint_done
  minidlna_print "Media database scan done."
}

minidlna_finger_print() {
      local MINIDLNA_TMP_DIR
      local mfp
      minidlna_print "Start profile check"
	    db_dir=`uci get minidlna.config.db_dir`
      MINIDLNA_TMP_DIR="$db_dir/tmp"

	    rm -fr $MINIDLNA_TMP_DIR
      [ -d $MINIDLNA_TMP_DIR ] && {
        minidlna_print "WARNING: check media disk on errors!"
      }

	    mkdir -p $MINIDLNA_TMP_DIR

        for mdir in `uci get minidlna.config.media_dir` ; do
                dir=`echo $mdir | cut -d'/' -f1-4`
                jdir=`echo $mdir | cut -f 4 -d /`
                echo "Take finger print of " > ${MINIDLNA_TMP_DIR}/${jdir}.txt
                find $mdir -type f \( \
                  	   -name "*.mpg" -o -name "*.tts"  -o -name "*.wma" -o -name "*.wmv" \
                  	-o -name "*.mp3" -o -name "*.mpg"  -o -name "*.tts" -o -name "*.mp4" \
                  	-o -name "*.3gp" -o -name "*.adts" -o -name "*.ifo" -o -name "*.png" \
                  	-o -name "*.pcm" -o -name "*.wav"  -o -name "*.jpg" \
                      \) -exec ls -e {} \; >> ${MINIDLNA_TMP_DIR}/${jdir}.txt
                [ -r ${MINIDLNA_TMP_DIR}/${jdir}.txt ] && mfp=`cat ${MINIDLNA_TMP_DIR}/${jdir}.txt | md5sum | cut -f 1 -d ' '` 
                echo "$mdir : $mfp" >> ${MINIDLNA_TMP_DIR}/media_disk_fingerprint
                minidlna_print "mediadir=$dir calc fingerprint=$mfp"
        done
        md_fp=`cat ${MINIDLNA_TMP_DIR}/media_disk_fingerprint | md5sum | cut -f 1 -d ' '`
        minidlna_print "Media disk calc fingerprint=$md_fp"

      
        FPdone=`cat $FILE_FP_DONE`
        if [  -f $db_dir/files.db -a -n $FILE_FP_DONE -a -f $FILE_FP_DONE -a x"$md_fp" == x"$FPdone" ]
        then
          minidlna_print "Skip media database rescan ($md_fp == $FPdone)"
        else
          minidlna_print "Force rescan media database ($md_fp != $FPdone)"
          option_force_reload=-R
          minidlna_rm_FP_done
        fi
        
        cp ${MINIDLNA_TMP_DIR}/media_disk_fingerprint $db_dir
}

[ -n "$BOOT_DELAY" ] && {
  minidlna_print "Delay minidlna startup with $BOOT_DELAY sec"
  sleep $BOOT_DELAY
}

if [ x"$MINIDLNA_FORCE_RESCAN" == x"1" ]
then
  minidlna_print "Option set force_rescan media database"
  option_force_reload=-R
  minidlna_rm_FP_done
else
  if [ x"$MINIDLNA_MEDIA_FINGERPRINT" == x"1" ]
  then
    minidlna_print "Option media fingerprint"
	  minidlna_finger_print
  else
    minidlna_print "Skip media database rescan"
    option_force_reload=
  fi
fi

log_file="`uci get minidlna.config.log_dir`/minidlna.log"
[ -f $log_file ] && { 
  cp $log_file $log_file.bak
  rm $log_file
}

/usr/sbin/cgroup_wrapper.sh $@ ${option_force_reload}


MINIDLNA_TMP_DIR="$db_dir/tmp"

tail -f $log_file | while read a
do
  check_finished=`echo $a | grep "Finished parsing playlists."`
  [ -n "$check_finished" ] && {
    minidlna_set_FP_done
  }
done

sleep 5
PID=`cat $MINIDLNA_D_PID`
[ -n "$PID" ] && PID_CHECK=`ps -w | grep $PID | egrep -e "/usr/sbin/minidlnad"`

minidlna_print "minidlnad started ($?:$PID)"

